package im.oen.boot.api.dispatch.handler;

import im.oen.boot.api.annotation.handler.MethodAroundHandler;
import im.oen.boot.api.dao.AbsDao;
import im.oen.boot.api.entity.AbsEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.Serializable;

/**
 * @author Kevin.Xu
 */
public interface MethodHandler {

    Logger log = LoggerFactory.getLogger(MethodHandler.class);

    /**
     * 需要执行的命令
     *
     * @return
     */
    public String cmd();

    /**
     * 具体执行函数
     *
     * @param dao                 需要的DAO
     * @param methodAroundHandler 执行方法的前后置函数
     * @param entity              对应的类
     * @param paths               对应的api路径
     * @param body                请求参数
     * @return 执行结果
     */
    public <T extends AbsEntity, ID extends Serializable> Object handler(AbsDao<T, ID> dao, MethodAroundHandler<T> methodAroundHandler, Class<T> entity, String[] paths, String body);
}
